package com.psdi.element;

import com.psdi.manager.GameLoader;
import com.psdi.physics.Collider;

import javax.swing.*;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

/**
 * 地图对象类，继承自元素对象基类。
 * 该类用于表示游戏中的地图元素。
 */
public class MapObject extends ElementObject implements Collider {
    private int HP;
    public MapObject(Position pos, Size size, ImageIcon image, int HP) {
        transform = new Transform(pos, new Rotation(), size);
        setImage(image);
        this.HP = HP;
        tag=Tag.MAP;
//        CollisionSystem.INSTANCE.addElement(this); // 将地图对象添加到碰撞系统中
    }
    public MapObject(){}
    @Override
    public Size colliderSize() {
        return transform.size;
    }

    @Override
    public Position colliderPosition() {
        return transform.position;
    }

    @Override
    public Tag colliderTag() {
        return tag;
    }

    @Override
    public Set<Tag> colliderFilterTag() {
        Set<Tag> set = new HashSet<>();
        set.add(Tag.BULLET);
        set.add(Tag.PLAYER);
        set.add(Tag.KNIFE);
        set.add(tag);
        set.add(Tag.PROP);
        set.add(Tag.BOOM);
        set.add(Tag.BOSS);
        set.add(Tag.FVX);
        set.add(Tag.ENEMY);
        return set;
    }

    @Override
    public void onCollisionStay(ElementObject other) {
    }

    /**
     * 创建地图对象实例。
     *
     * @param type     地图类型
     * @param position 地图位置
     * @return 地图对象实例
     */
    public ElementObject createMapObject(String type, String position) {
        switch (type) {
//            case "IRON":
//                return new MapObject(Position.parsePosition(position), new Size(20, 20), GameLoader.wallIconMap.get("IRON"), 4);
//            case "BRICK":
//                return new MapObject(Position.parsePosition(position), new Size(20, 20), GameLoader.wallIconMap.get("BRICK"), 2);
//            case "GRASS":
//                return new MapObject(Position.parsePosition(position), new Size(20, 20), GameLoader.wallIconMap.get("GRASS"), 1);
//            case "RIVER":
//                return new MapObject(Position.parsePosition(position), new Size(20, 20), GameLoader.wallIconMap.get("RIVER"), -1);
            case "MAP1":
                return new MapObject(Position.parsePosition(position), new Size(800, 620), GameLoader.wallIconMap.get("MAP1"), 999);
            case "MAP2":
                return new MapObject(Position.parsePosition(position), new Size(800, 620), GameLoader.wallIconMap.get("MAP2"), 999);
            default:
                return new MapObject();
        }
    }

}
